//********************************************************************
// драивер внешнего АЦП AD7988
//*********************************************************************


#ifndef measurementH
#define measurementH

#include "GPIO_STM32F4xx.h"  
#include "cmsis_os.h"
#include "../settings.h"

// **** управление битами***********************************
#define MSET_BIT0 |=0x01
#define MSET_BIT1 |=0x02
#define MSET_BIT2 |=0x04
#define MSET_BIT3 |=0x08
#define MSET_BIT4 |=0x10
#define MSET_BIT5 |=0x20
#define MSET_BIT6 |=0x40
#define MSET_BIT7 |=0x80
#define MSET_BIT8 |=0x100
#define MSET_BIT9 |=0x200
#define MSET_BIT10 |=0x400
#define MSET_BIT11 |=0x800
#define MSET_BIT12 |=0x1000
#define MSET_BIT13 |=0x2000
#define MSET_BIT14 |=0x4000
#define MSET_BIT15 |=0x8000
#define MSET_BIT16 |=0x10000
#define MSET_BIT17 |=0x20000
#define MSET_BIT18 |=0x40000
#define MSET_BIT19 |=0x80000
#define MSET_BIT20 |=0x100000
#define MSET_BIT21 |=0x200000
#define MSET_BIT22 |=0x400000
#define MSET_BIT23 |=0x800000
#define MSET_BIT24 |=0x1000000
#define MSET_BIT25 |=0x2000000
#define MSET_BIT26 |=0x4000000
#define MSET_BIT27 |=0x8000000
#define MSET_BIT28 |=0x10000000
#define MSET_BIT29 |=0x20000000
#define MSET_BIT30 |=0x40000000
#define MSET_BIT31 |=0x80000000

#define MRSET_BIT0 &=~0x01
#define MRSET_BIT1 &=~0x02
#define MRSET_BIT2 &=~0x04
#define MRSET_BIT3 &=~0x08
#define MRSET_BIT4 &=~0x10
#define MRSET_BIT5 &=~0x20
#define MRSET_BIT6 &=~0x40
#define MRSET_BIT7 &=~0x80
#define MRSET_BIT8 &=~0x100
#define MRSET_BIT9 &=~0x200
#define MRSET_BIT10 &=~0x400
#define MRSET_BIT11 &=~0x800
#define MRSET_BIT12 &=~0x1000
#define MRSET_BIT13 &=~0x2000
#define MRSET_BIT14 &=~0x4000
#define MRSET_BIT15 &=~0x8000
#define MRSET_BIT16 &=~0x10000
#define MRSET_BIT17 &=~0x20000
#define MRSET_BIT18 &=~0x40000
#define MRSET_BIT19 &=~0x80000
#define MRSET_BIT20 &=~0x100000
#define MRSET_BIT21 &=~0x200000
#define MRSET_BIT22 &=~0x400000
#define MRSET_BIT23 &=~0x800000
#define MRSET_BIT24 &=~0x1000000
#define MRSET_BIT25 &=~0x2000000
#define MRSET_BIT26 &=~0x4000000
#define MRSET_BIT27 &=~0x8000000
#define MRSET_BIT28 &=~0x10000000
#define MRSET_BIT29 &=~0x20000000
#define MRSET_BIT30 &=~0x40000000
#define MRSET_BIT31 &=~0x80000000
//***********************************************************

#define FIFO_AD7988_DATA_SIZE 16384	// размер буфера под принимаемые даннные с АЦП

#define PORT_ANALOG_ON GPIOC				// порт включения аналогового питания
#define PIN_ANALOG_ON 0							// пин включения аналогового питания

#define PORT_ON_CONVERT GPIOB				// порт начала преобразования ацп
#define PIN_ON_CONVERT 5						// пин начала преобразования АЦП

#define PORT_ON_IN_POWER GPIOB				// порт входа импульсного источника питания
#define PIN_ON_IN_POWER 14						// пин входа импульсного источника питания

#define PORT_ON_OUT_POWER GPIOB				// порт входа импульсного источника питания
#define PIN_ON_OUT_POWER 15						// пин входа импульсного источника питания

#define F_TIMER4	(float) 84000000			// частота тактирования 4 таймера !не менять!
#define T_CONV_AD7988 (float)0.0000016	// время преобразования АЦП
//#define F_DISCRET_ADC (float)100000			// необходимая частота дискретезации ацп



//global value:	
extern	unsigned short ad7988Data[FIFO_AD7988_DATA_SIZE];		// буфер для предварительного хранения данных с ацп
extern volatile unsigned short numberWriteDataFifo;									// номер писать принятые данные
extern volatile unsigned short numberReadDataFifo;										// номер окуда читать приинятые данные
extern volatile unsigned char MeasureOrRead;								// 0- преобразование АЦП 1- чтение данных АЦП 		
extern volatile unsigned char ErrorBufADC;									// 0 - небыло переполнений буфера 1 - было переполнение буфера						

//public:
		void measureInit(void);					// инициализация измерения
		void startMeasure(void);				// запустить измерение
		void stopMeasure(void);					// остановить измерение	
		void readDataBufADC(short * arrayData,unsigned short sizeData); // прочитать данные в массив arrayData длиной sizeData на время пока не будет заполнен весь массив функция блокируется  

//private:
		
		void initPortADC(void);
		void initSPI1(void);
		void initTimer4(void);
		
#endif
